package ProxyPattern.staticProxy;

// 实现且关联 接口的类， 就是静态代理类
/*
静态代理
    优点： 使客户端 不需要 知道实现类是什么，只需要知道 代理类即可。
          对于 构造函数的参数部分， 可以用工厂模式解决。
    缺点：
    1. 如果接口增加一个方法， 所有代理类 也需要实现此方法，增加代码维护复杂度。
    2. 静态代理值为 一个接口 提供代理，如果还要 为其他接口 提供代理， 需要 再次定义代理类。
 */
public class UsermanagerImplProxy implements UserManager {

    // 被代理的目标对象
    private UserManager userManager;

    public UsermanagerImplProxy(UserManager userManager){
        this.userManager = userManager;
    }

    // 封装一遍 被代理对象的 方法， 前后可以插入 新的逻辑，即为代理
    @Override
    public void addUser(String userId, String userName) {
        try{
            System.out.println("start --> addUser()");
            userManager.addUser(userId, userName);
            System.out.println("success --> addUser()");
        }catch (Exception e){
            System.out.println("error --> addUser()");
        }
    }

    /**
     *
     * 下面 三个方法 可以同样封装
     */

    @Override
    public void delUser(String userId) {

    }

    @Override
    public String findUser(String userId) {
        return null;
    }

    @Override
    public void modifyUser(String userId, String userName) {

    }
}
